const { AsyncParallelHook } = require("tapable")

const hook = new AsyncParallelHook(["name", "age"])

// hook.tap("fn1", function (name, age) {
// 	console.log(`fn1=====>${name},${age}`)
// })


// hook.tap("fn2", function (name, age) {
// 	console.log(`fn2=====>${name},${age}`)
// })

// hook.callAsync("lx", 25, function () {
// 	console.log("回调")
// })




// console.time("time")
// // callback函数表示结束
// hook.tapAsync("fn1", function (name, age, callback) {
// 	setTimeout(() => {
// 		console.log(`fn1=====>${name},${age}`)
// 		callback()
// 	}, 2000)
// })


// hook.tapAsync("fn2", function (name, age, callback) {
// 	setTimeout(() => {
// 		console.log(`fn2=====>${name},${age}`)
// 		callback()
// 	}, 2000)
// })

// hook.callAsync("lx", 25, function () {
// 	console.log("回调")
// 	console.timeEnd("time")
// })


console.time("time")
hook.tapPromise("fn1", function (name, age) {
	return new Promise(resolve => {
		setTimeout(() => {
			console.log(`fn1=====>${name},${age}`)
			resolve()
		}, 2000)
	})
})


hook.tapPromise("fn2", function (name, age) {
	return new Promise(resolve => {
		setTimeout(() => {
			console.log(`fn2=====>${name},${age}`)
			resolve()
		}, 2000)
	})
})

hook.promise("lx", 25).then(res => {
	console.log("回调")
	console.timeEnd("time")
})
